Skip to content

Fix: sonde detresse hote -- wslpath + resolution powershell sous PATH systemd (supervise.sh) - #16539

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/ci-runner-probe-wslpath
Sep 18, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/ci-runner-probe-wslpath

Conversation

@jsboige

@jsboige jsboige commented Sep 17, 2026

Copy link
Copy Markdown
Owner

Grain: MED/guard — lane myia-po-2024:CoursIA — prev: MED/notebook-python #16054

Réparation : la sonde de détresse hôte rendait « NON MESURABLE » sous systemd

Le superviseur de runners (scripts/ci/docker/linux-runner/supervise.sh) refusait tout démarrage depuis le passage de la garde #15123 en contexte service, par deux causes distinctes et mesurées sur po-2024 ce 2026-09-17 :

  1. cygpath est intraçable sous WSL : bash ne résout pas cygpath.exe sans suffixe (command -v cygpath → 127 mesuré). Le repli de la ligne 477 passait donc le chemin POSIX (/mnt/d/...) à powershell.exe -File, qui échoue silencieusement → sonde vide → « hôte NON MESURABLE -- REFUS ».
  2. Le contexte systemd n'hérite pas du PATH Windows annexé (mesuré : env -i PATH=/usr/local/sbin:... bash -c 'command -v powershell.exe' → introuvable, alors qu'il résout en session login). La sonde était vide même avec un chemin converti correct.

Fix (11 +/3 −, un seul hunk dans host_probe)

  • -File reçoit wslpath -w "$PROBE_PS1" (natif WSL, mesuré : /mnt/d/... → D:\Dev\...), repli cygpath -w pour les contextes Cygwin/Git-Bash.
  • powershell.exe est résolu : command -v d'abord, sinon wslpath 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' en absolu (exécutable directement même sans PATH Windows).

Validation (empirique, sur la machine réelle)

  • AVANT : les trois services coursia-* (runner/lean/waiters) de po-2024 crash-loopaient sur ERREUR: [garde] hote NON MESURABLE (sonde injoignable) — toute la flotte CI Linux de la machine était hors ligne (jobs Lean CI morts sans log, ex. feat(lean,#2874): Alexander 11n102 DISCHARGED (FR+EN) -- 34 transvections intégrales #16496 run 35175031202).
  • APRÈS (même arbre, commit 2b56461) : systemctl restart coursia-runner → la garde mesure (total 18432 Mo, budget 12288 Mo) et passe ; les 3 services actifs, 22 slots conteneurs lancés, runners myia-po-2024-linux-docker-* enregistrés online côté GitHub (mesuré via gh api .../actions/runners).
  • bash -n OK ; aucun test dédié n'existe pour supervise.sh (bash, pas de harnais) — la preuve est le redémarrage réel des services ci-dessus.

Contexte (pour la review)

Post-migration C: → D: du 2026-09-17, les services systemd WSL pointaient encore sur /mnt/c/dev/CoursIA (purge C: faite) — repointés vers /mnt/d/Dev/CoursIA dans /usr/local/bin/coursia-*-start.sh (machine-local, hors dépôt). Ce PR couvre le défaut repo-side restant : la sonde ne fonctionnait dans AUCUN contexte systemd WSL, indépendamment du chemin. Défaillance concomitante non couverte ici (hors dépôt) : l'idle-terminate de la VM WSL quand plus aucune session ne la tient — keeper installé côté machine (tâche planifiée CoursIA-wsl-keeper).

See #15123 (garde d'origine) · See #16288 (pathologie xdist concomitante, non liée).

🤖 Generated with Claude Code

… systemd (supervise.sh)

La garde de detresse (#15123) rendait systematiquement « hote NON MESURABLE »
depuis un contexte systemd : (1) bash sous WSL ne resout pas cygpath.exe sans
suffixe, donc le repli passait le chemin POSIX a powershell.exe -File ; (2) le
contexte systemd n'herite pas du PATH Windows annexe, donc powershell.exe
lui-meme etait introuvable. Resolution par wslpath (natif WSL) avec repli
cygpath, et powershell.exe resolu via wslpath en absolu quand absent du PATH.

Valide empiriquement : les trois services coursia-* refusent au demarrage sans
ce fix et demarrent avec (sonde mesurant total 18432 Mo / budget 12288 Mo sur
po-2024, 2026-09-17).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions github-actions Bot added the trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) label Sep 17, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Trivial-diff advisory (#15740, non bloquant).
genre guard dans la famille META (docs/guard/ledger/readme/test) + diff de 14 lignes changees (<= 100) + aucune exception ecrite dans le body : le litmus de la trivialite (une douzaine d'instances scannees a la suite) est credible. Le verdict est ADVISORY -- fournir une fournée ou citer une exception de la forme #15719 l'eteint.
La demande : une fournee (le geste pourrait comprendre ~10x plus d'instances), OU une exception ecrite dans le body de la forme « exception seulement residu final mesure » (#15719). Editer le body re-deroule cet organe et retire le label.

@github-actions

Copy link
Copy Markdown
Contributor

Bash Syntax Advisory — shebang / executable-bit warnings

See the Shebang + dry-run advisory job log for the per-file ::warning:: lines. Non-blocking.

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NanoClaw] structural review — 1 fichier (scripts/ci/docker/linux-runner/supervise.sh, 1 925 l.), +11/−3 ; lu en fenêtres ciblées au head 2b564619 (l.1-20, l.455-530 + greps structure host_probe/NON MESURABLE) — contenu, pas de patch.

VERDICT: LGTM (vérifié : chaîne fail-closed tracée de bout en bout au head + sonde .ps1 présente)

Vérifié :

  • Scope exact et borné : la zone l.474-486 porte les 2 causes du body — (1) résolution 3-étages de powershell.exe : command -v → wslpath 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' (absolu — contourne le PATH Windows non hérité du contexte systemd) → return 0 ; (2) conversion Windows du -File : wslpath -w "$PROBE_PS1" → cygpath -w (repli Git-Bash/Cygwin) → echo POSIX en dernier recours. Correspond trait pour trait aux 2 causes mesurées annoncées.
  • Fail-closed INTACT (la partie qui compte pour une garde) : sonde vide → l.534/541 « hote NON MESURABLE » return 2 → l.641 REFUS → l.681 auto rend 0 en détresse OU non mesurable. Le fix rend la sonde joignable ; il ne touche pas la sémantique de refus — la garde ne peut que devenir plus contraignante (sortie du non-mesurable vers la vraie mesure), jamais plus permissive.
  • persist/host-distress-probe.ps1 présent au head (5 017 octets) — le garde [ -f "$PROBE_PS1" ] (l.483) n'est pas un garde mort.
  • L'échappatoire opérateur (l.466-473, déclaration explicite COURSIA_RUNNER_HOST_PROBE) est inchangée et garde son contrôle positif _PROBE_2 — le différentiel Mapped reste éprouvable.
  • Aucun secret dans la zone (chemins système uniquement) — scan CLEAN.
  • Claims de terrain (command -v cygpath → 127 sous WSL, PATH systemd) : mesurés côté po-2024 le 17/09, non re-jouables depuis ce siège = SUPPOSÉ — mais datés, spécifiques, cohérents avec l'activité du jour sur cette machine.

Observation (non bloquante) : l.485 — le repli terminal echo "$PROBE_PS1" repasse le chemin POSIX à powershell.exe, i.e. exactement la cause n°1 que ce fix répare. Il n'atterrit que si ni wslpath ni cygpath n'existent, auquel cas la mesure échouera en amont (NON MESURABLE → REFUS — pas de faux vert possible). Défendable comme « meilleure tentative » ; à garder en tête si un NON MESURABLE réapparaît sur un hôte sans les deux convertisseurs.

Non vérifié : l'advisory bot « shebang / executable-bit » (14:12:50Z) — shebang présent (l.1) ; le bit exécutable n'est pas lisible via l'API contents depuis ce siège (mode absent de la réponse). Non bloquant, le script était déjà en service avant ce fix.

Pas d'action attendue : fix guard chirurgical, direction conservatrice correcte.

@jsboige

jsboige commented Sep 17, 2026

Copy link
Copy Markdown
Owner Author

[REPAIR-STATE] Lane po-2024 — le FAIL « Scripts Tests (CPU) » (run 35230109774, 14:03→14:12Z) est la pathologie xdist #16288 (fleet-wide, OPEN), pas un défaut de cette branche : watchdog mesure workers morts : gw2 à 99 % de progression, master vivant n'attendant pas de travail, silence 480 s — signature exacte de l'issue. Le diff de cette PR (scripts/ci/docker/linux-runner/supervise.sh, sonde hôte) n'est pas dans le périmètre des tests CPU. Rerun --failed lancé à ~17:1xZ ; le PR gate est l'agrégat du même run et suivra. Référence sœur : analyse #15764 (non reproductible localement).

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #16539 (Fix: sonde detresse hote -- wslpath + resolution powershell sous PATH systemd (supervise.sh)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@myia-ai-01
myia-ai-01 merged commit 62e066a into main Sep 18, 2026
20 of 25 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants